/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.br.imovel.controller;

import com.br.imovel.ejb.AlunoAvaliacaoEJBLocal;
import com.br.imovel.ejb.ItemEJBLocal;
import com.br.imovel.model.Preenchimento;
import com.br.imovel.model.Item;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
 *
 * @author diego
 */
@ManagedBean(name = "alunoAlunoAvaliacaoM")
@SessionScoped
public class AlunoAlunoAvaliacaoMBean {
    @EJB
    private AlunoAvaliacaoEJBLocal alunoAvaliacaoEJB;
    @EJB
    private ItemEJBLocal itemAlunoAvaliacaoEJB;
    private Preenchimento entidade;
    private Preenchimento[] entidadesSelecionadas;
    private DataModel entidades;
    private FacesMessage msg;
    private Logger log;

    /*public AlunoAlunoAvaliacaoMBean() {
        log = Logger.getLogger(AlunoAlunoAvaliacaoMBean.class);
        BasicConfigurator.configure();
        log.setLevel(Level.ALL);
        log.info("entrou no construtor");
        iniciaDados();
    }*/

    public Preenchimento[] getEntidadesSelecionadas() {
        return entidadesSelecionadas;
    }

    public void setEntidadesSelecionadas(Preenchimento[] entidadesSelecionadas) {
        this.entidadesSelecionadas = entidadesSelecionadas;
    }

    public void log(String mensagem, Level level, Exception e) {
        if (level == Level.FATAL) {
            log.fatal(System.currentTimeMillis() + mensagem, e);
        } else if (level == Level.ERROR) {
            log.error(System.currentTimeMillis() + mensagem, e);
        } else if (level == Level.WARN) {
            log.warn(System.currentTimeMillis() + mensagem, e);
        } else if (level == Level.INFO) {
            log.info(System.currentTimeMillis() + mensagem, e);
        } else if (level == Level.TRACE) {
            log.trace(System.currentTimeMillis() + mensagem, e);
        }

    }

    public Preenchimento getEntidade() {
        return entidade;
    }

    public void setEntidade(Preenchimento entidade) {
        this.entidade = entidade;
        selectedItemAlunoAvaliacao = null;
        /*if (this.getEntidade().getItens() != null && !this.getEntidade().getItens().isEmpty()) {
         for (Item itemAva : this.getEntidade().getItens()) {
         selectedItemAlunoAvaliacao.add(itemAva.getId().toString());
         }
         }*/
        log.trace("setEntidade:" + entidade);

    }

    public void setEntidadeDuplicar(Preenchimento entidade) {
        this.entidade = entidade;
        this.entidade.setId(null);
        log.trace("setEntidadeDuplicar:" + entidade);

    }

    public DataModel getEntidades() {
        if (entidades == null) {
            List<Preenchimento> lista = alunoAvaliacaoEJB.recuperaTodos();
            log.trace("getEntidades :" + lista);
            entidades = new ListDataModel(lista);
        }
        populaListaItemAlunoAvaliacao();
        return entidades;
    }

    public void setEntidades(DataModel entidades) {
        this.entidades = entidades;

    }

    public void prepararAdicionarEntidade() {
        this.entidade = new Preenchimento();
        selectedItemAlunoAvaliacao = null;
        log.info("prepara Adicionar entidade :" + entidade);

    }

    public void prepararDuplicarEntidade() {
        this.entidade.setId(null);


        log.info("prepara Duplicar Entidade :" + entidade);
    }

    public void salvaEntidade() {
        if (this.getEntidade() != null) {

            /* List<Item> listItemAlunoAvaliacao = new ArrayList<Item>();

             for (int i = 0; i < selectedItemAlunoAvaliacao.size(); i++) {
             Long idItemAlunoAvaliacao = Long.parseLong(selectedItemAlunoAvaliacao.get(i));
             listItemAlunoAvaliacao.add(itemAlunoAvaliacaoEJB.recupera(idItemAlunoAvaliacao));
             }

             this.getEntidade().setItens(listItemAlunoAvaliacao);
             */
            if (this.getEntidade().getId() == null) {
                alunoAvaliacaoEJB.novo(entidade);
                empilhaMensagem(FacesMessage.SEVERITY_INFO, "Registro salvo com sucesso " + entidade.getId(), null);

            } else {
                alunoAvaliacaoEJB.atualiza(entidade);
                empilhaMensagem(FacesMessage.SEVERITY_INFO, "Registro atualizado com sucesso " + entidade.getId(), null);
            }


            iniciaDados();
        }
    }

    public void removerEntidade() {
        log.info("Remover  Entidade :" + entidade);
        alunoAvaliacaoEJB.remove(entidade);
        empilhaMensagem(FacesMessage.SEVERITY_INFO, "Registro removido com sucesso " + entidade.getId(), null);
        iniciaDados();
    }

    public void removerEntidadesSelecionadas() {
        log.trace("Remover  Entidades Selecionadas :" + entidadesSelecionadas);
        empilhaMensagem(FacesMessage.SEVERITY_INFO, "Registros removidos  com sucesso, total de  " + this.entidadesSelecionadas.length, null);
        for (Preenchimento entidadeAtual : entidadesSelecionadas) {
            alunoAvaliacaoEJB.remove(entidadeAtual);
        }
        iniciaDados();
    }

    private void iniciaDados() {

        this.entidades = null;
        this.entidade = new Preenchimento();
        this.entidadesSelecionadas = null;
        itemAlunoAvaliacao = new HashMap<String, Long>();
        log.trace("Limpar dados das  Entidades :");

    }

    private void empilhaMensagem(FacesMessage.Severity tipoMensagem, String titulo, String mensagem) {
        msg = new FacesMessage(tipoMensagem, titulo, mensagem);
        FacesContext.getCurrentInstance().addMessage(null, this.msg);

    }

    private void populaListaItemAlunoAvaliacao() {

        itemAlunoAvaliacao = new HashMap<String, Long>();

        for (Item itemAlunoAvaliacaoAtual : itemAlunoAvaliacaoEJB.recuperaTodos()) {
            itemAlunoAvaliacao.put(itemAlunoAvaliacaoAtual.getNome(), itemAlunoAvaliacaoAtual.getId());
        }

    }
    private List<String> selectedItemAlunoAvaliacao;
    private Map<String, Long> itemAlunoAvaliacao;

    public List<String> getSelectedItemAlunoAvaliacao() {
        return selectedItemAlunoAvaliacao;
    }

    public void setSelectedItemAlunoAvaliacao(List<String> selectedItemAlunoAvaliacao) {
        this.selectedItemAlunoAvaliacao = selectedItemAlunoAvaliacao;
    }

    public Map<String, Long> getItemAlunoAvaliacao() {
        return itemAlunoAvaliacao;
    }

    public void setItemAlunoAvaliacao(Map<String, Long> itemAlunoAvaliacao) {
        this.itemAlunoAvaliacao = itemAlunoAvaliacao;
    }
}
